package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.BomProductEntity;

import java.util.List;
import java.util.Map;

/**
 * @author long.rao
 * @version v1.0
 * @date 2019/2/1 14:31
 * @since v1.0
 */
public interface BomProductModel extends IModel<BomProductEntity> {
    /**
     * BOM单产品数据插入
     * @param entity BOM产品实体
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-02-01 15:16
     */
    @Override
    Integer insert(BomProductEntity entity) throws XbbException;
    /**
     * BOM单产品数据更新
     * @param entity BOM单产品实体
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-02-01 15:17
     */
    @Override
    Integer update(BomProductEntity entity) throws XbbException;
    /**
     * BOM单产品数据保存
     * @param entity BOM单产品实体
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-02-01 15:17
     */
    Integer save(BomProductEntity entity) throws XbbException;
    /**
     * BOM单产品数据查询多个
     * @param param 参数
     * @return List<BomProductEntity>
     * @author long.rao
     * @date 2019-02-01 15:18
     */
    @Override
    List<BomProductEntity> findEntitys(Map<String, Object> param);
    /**
     * BOM单产品数据查询条数
     * @param param 参数
     * @return java.lang.Integer
     * @author long.rao
     * @date 2019-02-01 15:18
     */
    @Override
    Integer getEntitysCount(Map<String, Object> param);
    /**
     * BOM单产品数据单条查询
     * @param key 主键ID
     * @param corpid 公司ID
     * @return java.lang.Integer
     * @author long.rao
     * @date 2019-02-01 15:19
     */
    BomProductEntity getByKey(Long key, String corpid);
    /**
     * 根据BOM单id获取对应的类型的产品
     * @param bomId BOM单id
     * @param corpid 公司ID
     * @param productType 产品类型，1：成品；2：物料；null：获取全部
     * @author lcx
     * @date 2019-02-01 15:19
     */
    List<BomProductEntity> getProductsByBomId(Long bomId, String corpid, Integer productType);

    /**
     * 根据BOM单id获取对应的类型的产品
     * @param bomId BOM单id
     * @param corpid 公司ID
     * @param productType 产品类型，1：成品；2：物料；null：获取全部
     * @param delIn del
     * @author lcx
     * @date 2019-02-01 15:19
     */
    List<BomProductEntity> getProductsByBomId(Long bomId, String corpid, Integer productType, List<Integer> delIn);

    /**
     * 批量删除bom单的关联产品
     * @author 吴峰
     * @date 2019/3/6 21:26
     * @param list bom单id列表
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException 业务异常
     */
    Integer deleteByBomIdIn(List<Long> list, String corpid);
    /**
     * 批量删除bom单的关联产品
     * @author 吴峰
     * @date 2021/7/23 15:07
     * @param list bom单产品id列表
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException 业务异常
     */
    Integer deleteByIdIn(List<Long> list, String corpid);
    /**
     * Description: 一致性同步
     * @param corpid
     * @param productId
     * @param productName
     * @param specification
     * @param productNo
     * @return java.lang.Integer
     * @author 魏荣杰
     * @date 2019/12/4 3:58 下午
     * @since v4.7.1
     */
    Integer dataConsistencyUpdate(String corpid, Long productId, String productName, String specification, String productNo);

    Long isProductSubAttrExist(String attr, String corpid, Integer type, Integer isArray);

    /**
     * 子表单数字字段汇总
     * @param corpid 公司id
     * @param field 需要汇总的字段
     * @param refId 单据id
     * @param productIdIn 单据在该产品关联的产品id 如生产单有物料产品和成品产品 refId为生产单id productIdIn为物料产品的id
     * @return
     */
    Double summaryByAttr(String field,String corpid,  Long refId, List<Long> productIdIn,Integer type);

    Double summaryByAttrFromOutSide(String field,String corpid,  Long refId, List<Long> productIdIn,Integer type);

    Long countProductSub(String attr, String corpid, Integer type, Integer isArray);

    List<BomProductEntity> getProductWithSubData(String attr, String corpid, Integer type, Integer isArray, Long idGte, Integer limit);
    /**
     * 批量更新bom单的关联产品
     * @author 吴峰
     * @date 2021/7/23 15:07
     * @param list bom单产品列表
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException 业务异常
     */
    Integer updateBatch(List<BomProductEntity> list, String corpid);

    Integer insertBatch(List<BomProductEntity> list);

    /**
     * 批量更新del
     * @param list
     * @param corpid
     * @param del
     * @return
     */
    Integer deleteBatch(List<Long> list, String corpid, Integer del);
}
